/**
 * https://leetcode.cn/problems/unique-number-of-occurrences/description/?envType=study-plan-v2&envId=leetcode-75
 *
 * 给你一个整数数组 arr，请你帮忙统计数组中每个数的出现次数。
 *
 * 如果每个数的出现次数都是独一无二的，就返回 true；否则返回 false。
 * 示例 1：
 *
 * 输入：arr = [1,2,2,1,1,3]
 * 输出：true
 * 解释：在该数组中，1 出现了 3 次，2 出现了 2 次，3 只出现了 1 次。没有两个数的出现次数相同。
 * 示例 2：
 *
 * 输入：arr = [1,2]
 * 输出：false
 * 示例 3：
 *
 * 输入：arr = [-3,0,1,-3,1,1,1,-3,10,0]
 * 输出：true
 * @param arr
 */
function uniqueOccurrences(arr: number[]): boolean {
    const countMap = new Map<number, number>()
    const valueSet = new Set<number>()
    for (const num of arr) {
        if (countMap.has(num)) {
            countMap.set(num, countMap.get(num)! + 1)
        } else {
            countMap.set(num, 1)
        }
    }
    for (const value of countMap.values()) {
        if (valueSet.has(value)) return false
        valueSet.add(value)
    }
    return true
}

// @ts-ignore
const arr = [1, 2]
console.log(uniqueOccurrences(arr));